Converting C# void* to byte[]

Posted by Yurik on Stack Overflow See other posts from Stack Overflow or by Yurik
Published on 2010-04-03T02:55:53Z Indexed on 2010/04/03 3:03 UTC
Read the original article Hit count: 462

Filed under:
|
|
|

In C#, I need to write T[] to a stream, ideally without any additional buffers. I have a dynamic code that converts T[] (where T is a no-objects struct) to a void* and fixes it in memory, and that works great. When the stream was a file, I could use native Windows API to pass the void * directly, but now I need to write to a generic Stream object that takes byte[]. Can anyone suggest a hack way to create a dummy array object which does not actually have any heap allocations, but rather points to an already existing (and fixed) heap location.

This is the pseudo-code that I need:

void Write(Stream stream, T[] buffer)
{
    fixed( void* ptr = &buffer )    // done with dynamic code generation
    {
        int typeSize = sizeof(T);   // done as well

        byte[] dummy = (byte[]) ptr;   // <-- how do I create this fake array?

        stream.Write( dummy, 0, buffer.Length*typeSize );
    }
}  

© Stack Overflow or respective owner

Related posts about c#

Related posts about unmanaged